// 天气API测试脚本
// 使用方法: node test-weather.js

const axios = require('axios');

// 测试配置
const TEST_CONFIG = {
    baseUrl: 'http://localhost:30080', // 本地服务器地址
    testCity: '北京' // 测试城市
};

async function testWeatherAPI() {
    console.log('🌤️  开始测试天气API...\n');
    
    try {
        // 测试1: 检查天气服务配置状态
        console.log('1. 检查天气服务配置状态...');
        const configResponse = await axios.get(`${TEST_CONFIG.baseUrl}/api/weather/config`);
        console.log('配置状态:', configResponse.data);
        
        if (!configResponse.data.data.configured) {
            console.log('⚠️  天气服务未配置，需要设置环境变量:');
            console.log('   WEATHER_APPID=你的易客天气APPID');
            console.log('   WEATHER_APPSECRET=你的易客天气APPSECRET');
            console.log('\n可以通过以下方式设置:');
            console.log('   Windows: set WEATHER_APPID=your_appid && set WEATHER_APPSECRET=your_appsecret');
            console.log('   Linux/Mac: export WEATHER_APPID=your_appid && export WEATHER_APPSECRET=your_appsecret');
            return;
        }
        
        // 测试2: 获取当前位置天气
        console.log('\n2. 获取当前位置天气...');
        try {
            const currentWeatherResponse = await axios.get(`${TEST_CONFIG.baseUrl}/api/weather/current`);
            console.log('当前位置天气:', JSON.stringify(currentWeatherResponse.data, null, 2));
        } catch (error) {
            console.log('❌ 获取当前位置天气失败:', error.response?.data || error.message);
        }
        
        // 测试3: 根据城市名称获取天气
        console.log(`\n3. 获取${TEST_CONFIG.testCity}天气...`);
        try {
            const cityWeatherResponse = await axios.get(`${TEST_CONFIG.baseUrl}/api/weather/city/${TEST_CONFIG.testCity}`);
            console.log(`${TEST_CONFIG.testCity}天气:`, JSON.stringify(cityWeatherResponse.data, null, 2));
        } catch (error) {
            console.log('❌ 获取城市天气失败:', error.response?.data || error.message);
        }
        
        // 测试4: 使用POST方式查询天气
        console.log('\n4. 使用POST方式查询天气...');
        try {
            const postWeatherResponse = await axios.post(`${TEST_CONFIG.baseUrl}/api/weather/query`, {
                city: TEST_CONFIG.testCity
            });
            console.log('POST查询结果:', JSON.stringify(postWeatherResponse.data, null, 2));
        } catch (error) {
            console.log('❌ POST查询天气失败:', error.response?.data || error.message);
        }
        
        // 测试5: 测试算命API集成天气
        console.log('\n5. 测试算命API集成天气...');
        try {
            const fortuneResponse = await axios.post(`${TEST_CONFIG.baseUrl}/api/fortune`, {
                name: '测试用户',
                birthDate: '1990-01-01',
                gender: 'male',
                city: TEST_CONFIG.testCity
            });
            
            console.log('算命结果（含天气）:');
            console.log('- 用户信息:', fortuneResponse.data.data.userInfo);
            console.log('- 生肖星座:', fortuneResponse.data.data.zodiac, fortuneResponse.data.data.constellation);
            console.log('- 运势:', fortuneResponse.data.data.fortune.today.substring(0, 100) + '...');
            
            if (fortuneResponse.data.data.fortune.weather) {
                console.log('- 天气信息:');
                const weather = fortuneResponse.data.data.fortune.weather;
                console.log(`  城市: ${weather.city}`);
                console.log(`  温度: ${weather.temperature}°C (${weather.temperatureLow}°C ~ ${weather.temperatureHigh}°C)`);
                console.log(`  天气: ${weather.weather}`);
                console.log(`  空气质量: ${weather.airQuality}`);
                console.log(`  湿度: ${weather.humidity}`);
                console.log(`  更新时间: ${weather.date} ${weather.updateTime}`);
            } else {
                console.log('- 天气信息: 未获取到');
            }
            
        } catch (error) {
            console.log('❌ 算命API测试失败:', error.response?.data || error.message);
        }
        
        console.log('\n✅ 天气API测试完成！');
        
    } catch (error) {
        console.error('❌ 测试过程中出现错误:', error.message);
        
        if (error.code === 'ECONNREFUSED') {
            console.log('\n💡 请确保服务器正在运行:');
            console.log('   npm run dev  # 或者 npm start');
        }
    }
}

// 显示使用说明
function showUsage() {
    console.log('🌤️  天气API测试工具');
    console.log('');
    console.log('使用前请确保:');
    console.log('1. 服务器正在运行 (npm run dev)');
    console.log('2. 已配置天气API密钥:');
    console.log('   - 注册易客天气账号: http://www.yiketianqi.com/');
    console.log('   - 获取APPID和APPSECRET');
    console.log('   - 设置环境变量或在.env文件中配置');
    console.log('');
    console.log('开始测试...\n');
}

// 主函数
async function main() {
    showUsage();
    await testWeatherAPI();
}

// 运行测试
if (require.main === module) {
    main().catch(console.error);
}

module.exports = { testWeatherAPI };